package Controlador;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.rmi.CORBA.Tie;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;




import ComponenteSonido.Sonido;
import ComponenteTiempo.Tiempo;
import Vista.VistaJuego;
import Vista.VistaMenu;


public class ControladorJuego implements ActionListener {

	private VistaJuego vistajuego;
	private VistaMenu vistamenu;
	public JButton botones [][];
	private int[][] matrizMinas;
	Tiempo t;
	int fils;
	int cols;
	int totalminas;
	int casillas;

	//Constructor del ControladorMenu y llamada de la VistasMenu
	public ControladorJuego(int fils,int cols,int totalminas,String nivel) {
		super();
		this.vistajuego = new VistaJuego(fils,cols,totalminas);
		this.fils=fils;
		this.cols=cols;
		this.totalminas=totalminas;
		this.t = new Tiempo(vistajuego.getTxtTiempo());
		this.t.start();
		this.casillas=this.fils*this.cols-this.totalminas;
		this.vistajuego.setTxtnivelado(nivel);
		this.vistajuego.setTxtMinas(String.valueOf(casillas));
		this.vistajuego.setVisible(true);
		this.vistajuego.addListener(this);
		this.matrizMinas=vistajuego.getmatriz();
		this.vistajuego.setLocationRelativeTo(null);
		this.vistajuego.setSize(800,650);
	}
	
	//Inicio del ControladorMenu a la VistaMenu
	public void actionPerformed(ActionEvent e) {
		
		botones = this.vistajuego.getbotones();
		for(int i=0;i<fils;i++)
			for(int j=0;j<cols;j++)
			{
				
				if(e.getSource()==botones[i][j] && botones[i][j].getIcon()==null && botones[i][j].getBackground()!=Color.WHITE)	
			 
				{  
					botones[i][j].setBackground(Color.WHITE);
					
	    	       if(matrizMinas[i][j]==1)
						{
	                       t.getSeg();
	                       t.parar(true);
	                       boom();
	                     }
	                    else
	                     {
						   pulsarVacio(i,j);
	                     }
				}
			}
		
	};	
	
		void pulsarVacio(int i, int j)
		{//this.vacios=this.fils*this.cols-this.totalminas;
		
	    	casillas--;;
			vistajuego.setTxtMinas(String.valueOf(casillas));

		 botones[i][j].setText(Integer.toString(this.vistajuego.minasCerca(i,j))); //Cuantas Minas cerca
	    
		 if(casillas==0)
			
			
			 ganar();
		  
		}
		void ganar()
		  {
			 
			 t.parar(true);
			JOptionPane.showMessageDialog(null, "Ganastes, Felicitaciones",null, 0);
			casillas=fils*cols-totalminas;
			String time= vistajuego.getTxtTiempo().getText();
			String nivelfinal=vistajuego.getTxtnivelado();
			new ControladorJugador(casillas,time,nivelfinal);  
		     this.vistajuego.setVisible(false);
			
			//	volverEmpezar();	
		  }
	//Procedimiento al haber encontrado una mina
	void boom()
		  {  

          
		  for(int i=0;i<fils;i++)
		  for(int j=0;j<cols;j++)
		  {
			if(matrizMinas[i][j]==1)
			{
			//	Imagen aleatoria de las minas
				botones[i][j].setIcon(new ImageIcon(getClass().getClassLoader().getResource("Imagen/mina.jpg")));
				new Sonido("ComponenteTiempo/prueba.wav");
			}
			
	      }
		    //Mensaje al encontrar una mina
		//	son.start();
		  JOptionPane.showMessageDialog(null, "Boom!!! Has perdido, Intenta de Nuevo",null, 0);
		//  son.stop();
		  this.t=new Tiempo(vistajuego.getTxtTiempo());
		  t.parar(true);
		  volverEmpezar();
			
		  }
	
	
	//Procedimiento que al iniciar de nuevo el juego luego de haber perdido o de haber ganado
public	void volverEmpezar()

	 	{ casillas=fils*cols-totalminas;
	vistajuego.setTxtMinas(String.valueOf(casillas));

		//Dimension
	    	//int casillas=0;//cols*fils-totalminas;
			//	Volver al estado inicial
			for(int i=0;i<fils;i++)
			for(int j=0;j<cols;j++)
		  	{System.out.println();
				matrizMinas[i][j]=0;
				botones[i][j].setText("");
				botones[i][j].setBackground(null);
				botones[i][j].setIcon(null);
			}
			this.vistajuego.colocarMinas(totalminas);
			//casillas=cols*fils-totalminas;
			this.t = new Tiempo(vistajuego.getTxtTiempo());
			this.t.start();
				
//			this.vistajuego.setTxtMinas(String.valueOf(casillas));			
	 	}

	}
